/***************************************************************************
创建者：         hualei
开始时间：     2018.11.4
copyright: (C) 深圳市华友高科有限公司
修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   FTP文件管理模块视图界面部分
 *                                                                         *
 ***************************************************************************/
#include "filemanage.h"
#include "ui_filemanage.h"
#include <QStandardItemModel>
#include <QFont>
#include "../CommunicateDelegate/filedata.h"
#include <QDir>
#include "hmicommondefine.h"
#include <QMessageBox>
extern FileData fileData;

FileManage::FileManage(int styleId,QWidget *parent) :
    QWidget(parent),
    ui(new Ui::FileManage)
{
    ui->setupUi(this);
    initialDisplayStyle(styleId);
    // 设置表格不可编辑
    ui->LocalFile_TableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    // 设置表格为整行选择
    ui->LocalFile_TableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    // 设置按下Ctrl或Shift键后,可以多选
    ui->LocalFile_TableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
    // 设置设置列数和列宽
    ui->LocalFile_TableWidget->setColumnCount(1);
    ui->LocalFile_TableWidget->setColumnWidth(0,270);

    /****** 表头要在设置完行列数后才有效 *******/
    QStringList localHeaderStr;
    //设置标题,滑动条
    localHeaderStr << tr("本地文件");
    ui->LocalFile_TableWidget->setHorizontalHeaderLabels(localHeaderStr);


    // 设置表格不可编辑
    ui->ServerFile_TableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    // 设置表格为整行选择
    ui->ServerFile_TableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    // 设置按下Ctrl或Shift键后,可以多选
    ui->ServerFile_TableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
    // 设置设置列数和列宽
    ui->ServerFile_TableWidget->setColumnCount(1);
    ui->ServerFile_TableWidget->setColumnWidth(0,270);
    localHeaderStr.clear();
    localHeaderStr << tr("远程文件");
    ui->ServerFile_TableWidget->setHorizontalHeaderLabels(localHeaderStr);
}

void FileManage::initialDisplayStyle(int styleId)
{
    switch (styleId) {
    case 1:
        this->setGeometry(0,0,800,575);
        this->setMinimumSize(800,575);
        ui->LocalFile_TableWidget->setMinimumSize(260,280);
        ui->ServerFile_TableWidget->setMinimumSize(260,280);
        break;
    default:
        break;
    }
}

FileManage::~FileManage()
{
    delete ui;
}

void FileManage::updateLocalDir_in()
{
    updateLocalDir(localFilePath);
}

void FileManage::initView()
{
    localFileSelectList.clear();
    serverFileSelectList.clear();
    ui->LocalFile_TableWidget->clear();
    ui->ServerFile_TableWidget->clear();
}

void FileManage::updateView_Local(QList<QString> &fileList)
{
    ui->LocalFile_TableWidget->clear();
    QStringList headerStr;
    headerStr << tr("本地文件");
    ui->LocalFile_TableWidget->setHorizontalHeaderLabels(headerStr);
    ui->LocalFile_TableWidget->setColumnCount(1);
    ui->LocalFile_TableWidget->setColumnWidth(0,270);
    ui->LocalFile_TableWidget->setRowCount(fileList.count());
    for(int i=0; i < fileList.count(); i++)
    {
        // 在TableWidget控件上显示文件名(行编号不算列号)
        ui->LocalFile_TableWidget->setItem(i, 0, new QTableWidgetItem(fileList[i]));
    }
}

void FileManage::updateView_Server(QStringList &fileList)
{
    ui->ServerFile_TableWidget->clear();
    QStringList headerStr;
    headerStr << tr("远程文件");
    ui->ServerFile_TableWidget->setHorizontalHeaderLabels(headerStr);
    ui->ServerFile_TableWidget->setColumnCount(1);
    ui->ServerFile_TableWidget->setColumnWidth(0,270);
    ui->ServerFile_TableWidget->setRowCount(fileList.count());
    for(int i=0; i < fileList.count(); i++)
    {
        // 在TableWidget控件上显示文件名(行编号不算列号)
        ui->ServerFile_TableWidget->setItem(i, 0, new QTableWidgetItem(fileList[i]));
    }
}



QList<QString> &FileManage::getLocalFileSelectList()
{
    return localFileSelectList;
}

QList<QString> &FileManage::getServerFileSelectList()
{
    return serverFileSelectList;
}

void FileManage::on_Local_All_CheckBox_clicked(bool checked)
{
    // 本地文件全选
    if(checked)
    {
        // 高亮显示全选文件
        ui->LocalFile_TableWidget->selectAll();
        // 设置选中焦点
        ui->LocalFile_TableWidget->setFocus();
    }
    else
    {
        // 不高亮显示
        ui->LocalFile_TableWidget->clearSelection();
    }
}

void FileManage::on_DownloadFile_Btn_clicked()
{
    serverFileSelectList.clear();
    selectItemList.clear();
    ui->Local_All_CheckBox->setChecked(false);
    ui->Server_All_CheckBox->setChecked(false);
    // 下载文件
    // 获取远程文件列表中所选中的文件
    selectItemList = ui->ServerFile_TableWidget->selectedItems();
    for(int i=0; i < selectItemList.count(); i++)
    {
        if(!selectItemList[i]->text().isEmpty())
        {
            serverFileSelectList << selectItemList[i]->text();
        }
    }

    emit downloadFile_Signal();

    // 清除选中行
    ui->ServerFile_TableWidget->clearSelection();
}

void FileManage::on_UploadFile_Btn_clicked()
{
    localFileSelectList.clear();
    selectItemList.clear();
    ui->Server_All_CheckBox->setChecked(false);
    ui->Local_All_CheckBox->setChecked(false);

    // 上传文件
    // 获取本地文件列表中所选中的文件
    selectItemList = ui->LocalFile_TableWidget->selectedItems();
    for(int i=0; i < selectItemList.count(); i++)
    {
        if(!selectItemList[i]->text().isEmpty())
        {
            localFileSelectList << selectItemList[i]->text();
        }
    }
    emit uploadFile_Signal();

    // 清除选中行
    ui->LocalFile_TableWidget->clearSelection();
}

void FileManage::on_DeleteFile_Btn_clicked()
{
    QMessageBox message(QMessageBox::Question, "note", "是否删除远程文件?"
                        , QMessageBox::Yes | QMessageBox::No, NULL);
    if(message.exec() == QMessageBox::No)
    {
        return ;
    }

    localFileSelectList.clear();
    serverFileSelectList.clear();

    // 删除文件
    // 获取要删除的本地文件
    QList <QTableWidgetItem*> localSelectItemList = ui->LocalFile_TableWidget->selectedItems();
    for(int i=0; i < localSelectItemList.count(); i++)
    {
        if(!localSelectItemList[i]->text().isEmpty())
        {
            localFileSelectList << localSelectItemList[i]->text();
        }
    }

    // 获取要删除的远程文件
    QList <QTableWidgetItem*> serverSelectItemList = ui->ServerFile_TableWidget->selectedItems();
    for(int i=0; i < serverSelectItemList.count(); i++)
    {
        if(!serverSelectItemList[i]->text().isEmpty())
        {
            serverFileSelectList << serverSelectItemList[i]->text();
        }
    }
    emit removeRemoteFile_Signal();

    ui->Local_All_CheckBox->setChecked(false);
    ui->Server_All_CheckBox->setChecked(false);
}

//void FileManage::on_getFileList_Btn_clicked()
//{
//    localFileSelectList.clear();
//    serverFileSelectList.clear();

//    //  初始化全选按钮状态
//    ui->Server_All_CheckBox->setChecked(false);
//    ui->Local_All_CheckBox->setChecked(false);

//    // 获取本地和服务器文件列表,更新显示至控件
//    if(ui->FileDir_ComBox->currentText() == tr("音乐文件目录"))
//    {
//        currentFileType = EM_CURRENT_MUSIC_FILE;
//    }
//    else if(ui->FileDir_ComBox->currentText() == tr("程序文件目录"))
//    {
//        currentFileType = EM_CURRENT_PROGRAM_FILE;
//    }
//    else if(ui->FileDir_ComBox->currentText() == tr("地图文件目录"))
//    {
//        currentFileType = EM_CURRENT_MAP_FILE;
//    }

//    // 更新显示文件
//    emit getFileList_Signal(currentFileType);
//}

void FileManage::on_Server_All_CheckBox_clicked(bool checked)
{
    // 服务器文件全选
    if(checked)
    {
        // 高亮显示全部服务器目录文件
        ui->ServerFile_TableWidget->selectAll();
        ui->ServerFile_TableWidget->setFocus();
    }
    // 非全选
    else
    {
        // 取消选中不高亮显示
        ui->ServerFile_TableWidget->clearSelection();
    }
}

//void FileManage::local_SelectSingleLine_Slot()
//{
//    //  获取当前选中为单行选择
//    if(ui->LocalFile_TableWidget->selectedItems().size() == 1)
//    {
//        // 记录当前行号
//        localCurrentSingleRow =ui->LocalFile_TableWidget->currentRow();

//    }
//}

void FileManage::server_SelectSingleLine_Slot()
{

}

void FileManage::showFileManageDialog_Slot()
{
    ui->FileDir_ComBox->setCurrentIndex(2);
//    bool isTheSame;
//    if(ui->localDir_ComBox->currentIndex())
//    {
//        isTheSame=true;
//    }
//    else
//    {
//        isTheSame=false;
//    }
    emit getFileList_Signal(FILEMANAGE_MAP_PATH);
    show();
}

void FileManage::updateLocalDir(QString dirPath)
{
    qDebug()<<"updateLocalDir"<<dirPath;
    // 本地目录文件信息
    QDir filePath;
    QStringList fileList;
    filePath.setPath(localFilePath);
    foreach (QFileInfo fileInfo, filePath.entryInfoList())
    {
        if(!fileInfo.isDir())
        {
            fileList << fileInfo.fileName();
        }
    }

    // 更新本地文件列表显示到控件上
    updateView_Local(fileList);
    emit setLocalFileDir_signal(dirPath);
}


void FileManage::on_localDir_ComBox_currentIndexChanged(int index)
{


    if(1==index)
    {
        localFilePath=D_HMI_PENDENT_UDISK_PATH;

    }
    else if(2==index)
    {
        localFilePath=D_HMI_PENDENT_UDISK2_PATH;

    }
    else if(3==index)
    {
        localFilePath=D_HMI_PENDENT_UDISK3_PATH;

    }
    else
    {
        localFilePath=remoteFilePath;
    }

    updateLocalDir(localFilePath);

}

void FileManage::on_FileDir_ComBox_currentIndexChanged(int index)
{


    localFileSelectList.clear();
    serverFileSelectList.clear();

    //  初始化全选按钮状态
    ui->Server_All_CheckBox->setChecked(false);
    ui->Local_All_CheckBox->setChecked(false);


    // 获取本地和服务器文件列表,更新显示至控件
    if(0 == index)
    {
        remoteFilePath=FILEMANAGE_MUSIC_PATH;
    }
    else if(1 == index)
    {
        remoteFilePath = FILEMANAGE_PROGRAM_PATH;
    }
    else if(2 == index)
    {
        remoteFilePath = FILEMANAGE_MAP_PATH;
    }
    else if(3 == index)
    {
        remoteFilePath =FILEMANAGE_AGVWORK_PATH  ;
    }
    else if(4 == index)
    {
        remoteFilePath =FILEMANAGE_BIN_PATH ;
    }
    else if(5 == index)
    {
        remoteFilePath = FILEMANAGE_GLOBALCONFIG_PATH;
    }
    else if(6 == index)
    {
        remoteFilePath = "/agvwork/AgvFundation/fundation/data/globalConfig/ethercat/";
    }
    else if(7 == index)
    {
        remoteFilePath = "/agvwork/AgvFundation/fundation/data/globalConfig/logFile/";
    }
    else if(8 == index)
    {
        remoteFilePath = "/agvwork/AgvFundation/fundation/data/robotImage/";
    }
    else if(9 == index)
    {
        remoteFilePath = "/agvwork/AgvFundation/fundation/data/robotData1/config/";
    }

    else if(10 == index)
    {
        remoteFilePath = "/agvwork/AgvFundation/fundation/data/robotData1/config/InstructionConfig/";
    }
    else if(11 == index)
    {
        remoteFilePath = "/agvwork/AgvFundation/fundation/data/robotData1/wave/";
    }


    // 更新显示文件
    qDebug()<<"remoteFilePath "<<remoteFilePath;
    on_localDir_ComBox_currentIndexChanged(ui->localDir_ComBox->currentIndex());
    emit getFileList_Signal(remoteFilePath);
}

void FileManage::on_DeleteLocalFile_Btn_clicked()
{
    QMessageBox message(QMessageBox::Question, "note", "是否删除本地文件?"
                        , QMessageBox::Yes | QMessageBox::No, NULL);
    if(message.exec() == QMessageBox::No)
    {
        return ;
    }
    // 获取本地文件列表中所选中的文件
    selectItemList = ui->LocalFile_TableWidget->selectedItems();
    for(int i=0; i < selectItemList.count(); i++)
    {
        if(!selectItemList[i]->text().isEmpty())
        {
            localFileSelectList << selectItemList[i]->text();
        }
    }
    emit removeLocalFile_Signal();
}


void FileManage::on_back_Btn_clicked()
{
    this->hide();
}
